class Animal:#抽象基类，定义了speak()方法
    def speak(self):
        raise NotImplementedError("Subclasses must implement this method")

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class AnimalFactory:
    @staticmethod  #用于定义类中的静态方法。静态方法不需要访问类或实例的属性
                   #可以通过 ClassName.method_name() 直接调用，而不需要创建类的实例。
    def create_animal(animal_type):
        if animal_type == "dog":
            return Dog()
        elif animal_type == "cat":
            return Cat()
        else:
            raise ValueError("Unknown animal type")

# 使用工厂创建动物实例
# 调用静态方法
animal1 = AnimalFactory.create_animal("dog")
animal2 = AnimalFactory.create_animal("cat")

print(animal1.speak())  # 输出: Woof!
print(animal2.speak())  # 输出: Meow!
"""总结：
抽象与实现分离：通过 Animal 抽象类，定义了接口，具体的实现由 Dog 和 Cat 完成。
工厂封装：AnimalFactory 类负责创建对象，客户端只需调用工厂方法，而无需关心具体的类如何实现。
可扩展性：如果需要添加新的动物类型，只需创建一个新的子类并在工厂方法中添加相应的判断，原有代码无需更改。
这提高了代码的灵活性和可维护性。
"""